package com.jyw.business.ast.domain.vo.web;

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.common.annotation.Conversion;
import com.jyw.common.annotation.Excel;
import com.jyw.common.constant.SysDictTypeConstant;
import com.jyw.common.enums.ConversionType;
import com.jyw.system.utils.DeptUtils;
import com.jyw.system.utils.TeamUtils;
import com.jyw.system.utils.UserUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 资产导出实体
 */
@Data
@FieldNameConstants
public class AstInfoExportVo {
    /** 名称 */
    @ApiModelProperty("名称")
    private String name;

    /** 资产类型(数据字典) */
    @ApiModelProperty("资产类型(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_TYPE)
    private String assetsType;

    /** 资产类型(数据字典) */
    @ApiModelProperty("资产类型(数据字典)")
    private String assetsTypeToName;

    /** 资产来源(数据字典) */
    @ApiModelProperty("资产来源(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_SOURCE)
    private String assetsSource;

    @ApiModelProperty("资产来源标签(数据字典)")
    private String assetsSourceToName;

    @ApiModelProperty("规格型号")
    private String model;

    /** 所属巡检单元 */
    @ApiModelProperty("所属巡检单元")
    private Long pertainUnit;

    @ApiModelProperty("所属巡检单元名称")
    private String pertainUnitName;

    /** 使用科室 */
    @ApiModelProperty("使用科室")
    @Conversion(value = ConversionType.DEPT,name = Fields.useDeptName)
    private Long useDept;

    /** 使用科室 */
    @ApiModelProperty("使用科室名称")
    private String useDeptName;

    /** 使用责任人 */
    @ApiModelProperty("使用责任人")
    @Conversion(value = ConversionType.USER,name = Fields.personLiableName)
    private Long personLiable;

    /** 使用责任人 */
    @ApiModelProperty("使用责任人")
    private String personLiableName;

    /** 所在位置 */
    @ApiModelProperty("所在位置")
    private String place;

    /** 备注 */
    @ApiModelProperty("备注")
    private String remark;

    @ApiModelProperty("资产编号")
    private String assetsCode;

    /** 设备S/N码 */
    @ApiModelProperty("设备S/N码")
    private String seriesNumb;

    /** 使用日期 */
    @ApiModelProperty("使用日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date useDate;

    /** 使用年限 */
    @ApiModelProperty("使用年限")
    private BigDecimal years;

    @ApiModelProperty("使用年限单位")
    private String useUnit;

    @ApiModelProperty("使用年限(年)")
    private Double useYears;

    /** 计量周期 */
    @ApiModelProperty("保养维护周期")
    private Integer meteringTimer;

    @ApiModelProperty("保养维护周期单位(数据字典)")
    private String meteringUnit;

    @ApiModelProperty("保养维护(年/次)")
    private Double meteringYears;

    /** 资产维护类型(1用户 2小组 3科室) */
    @ApiModelProperty("资产维护类型(1用户 2小组 3科室)")
    private Integer maintainInsideType;

    /** 指定维护对象标识 */
    @ApiModelProperty("指定维护对象标识")
    private Long maintainObjId;

    @ApiModelProperty("维护方名称")
    private String maintainName;

    /** 维保公司 */
    @ApiModelProperty("维保公司")
    @Conversion(value = ConversionType.DEPT,name = Fields.maintainCompanyName)
    private Long maintainCompany;

    /** 维保公司 */
    @ApiModelProperty("维保公司")
    private String maintainCompanyName;

    /** 维保责任人 */
    @ApiModelProperty("维保责任人")
    @Conversion(value = ConversionType.USER,name = Fields.maintainUserName)
    private Long maintainUser;

    /** 维保责任人 */
    @ApiModelProperty("维保责任人")
    private String maintainUserName;

    /** 维保期限 */
    @ApiModelProperty("维保期限")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date maintainTerm;

    /** 采购日期 */
    @ApiModelProperty("采购日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date purchaseDate;

    /** 采购编号 */
    @ApiModelProperty("采购编号")
    private String purchaseCode;

    /** 采购价格 */
    @ApiModelProperty("采购价格")
    private BigDecimal purchasePrice;

    /** 采购数量 */
    @ApiModelProperty("采购数量")
    private Long purchaseNumber;

    /** 项目名称 */
    @ApiModelProperty("项目名称")
    private String projectName;

    @ApiModelProperty("品牌(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_BRAND)
    private String brand;

    @ApiModelProperty("品牌(数据字典)")
    private String brandToName;

    /** 生产厂商 */
    @ApiModelProperty("生产厂商")
    private String manufacturer;

    /** 产地 */
    @ApiModelProperty("产地")
    private String originPlace;

    /** 售后电话 */
    @ApiModelProperty("售后电话")
    private String salesPhone;

    /** 供应商 */
    @ApiModelProperty("供应商")
    private String supplier;

    /** 供应商电话 */
    @ApiModelProperty("供应商电话")
    private String supplierPhone;

    @ApiModelProperty("IP地址")
    private String ipPlace;

    /** MAC地址 */
    @ApiModelProperty("MAC地址")
    private String macPlace;

    /** 操作系统(数据字典) */
    @ApiModelProperty("操作系统(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_OPERATING_SYSTEM)
    private String operatingSystem;

    @ApiModelProperty("操作系统标签")
    private String operatingSystemToName;

    /** 系统版本 */
    @ApiModelProperty("系统版本")
    private String systemVersion;

    /** 配置信息 */
    @ApiModelProperty("配置信息")
    private String configuration;

    public Double getUseYears() {
        if(!ObjectUtils.isEmpty(getYears())&&!ObjectUtils.isEmpty(getUseUnit())){
            switch (getUseUnit()) {
                case "1":
                    return getYears().doubleValue();
                case "2":
                    return getYears().divide(BigDecimal.valueOf(12),2,BigDecimal.ROUND_HALF_DOWN).doubleValue();
                case "3":
                    return getYears().divide(BigDecimal.valueOf(365/7),2,BigDecimal.ROUND_HALF_DOWN).doubleValue();
            }
        }
        return useYears;
    }

    public Double getMeteringYears() {
        if(!ObjectUtils.isEmpty(getMeteringTimer())&&!ObjectUtils.isEmpty(getMeteringUnit())){
            switch (getMeteringUnit()) {
                case "1":
                    return getMeteringTimer().doubleValue();
                case "2":
                    return BigDecimal.valueOf(getMeteringTimer()).divide(BigDecimal.valueOf(12),2,BigDecimal.ROUND_HALF_DOWN).doubleValue();
                case "3":
                    return BigDecimal.valueOf(getMeteringTimer()).divide(BigDecimal.valueOf(365/7),2,BigDecimal.ROUND_HALF_DOWN).doubleValue();
                case "4":
                    return BigDecimal.valueOf(getMeteringTimer()).divide(BigDecimal.valueOf(365),2,BigDecimal.ROUND_HALF_DOWN).doubleValue();
            }
        }
        return meteringYears;
    }

    public String getMaintainName() {
        if(!ObjectUtils.isEmpty(getMaintainInsideType())){
            switch (getMaintainInsideType()) {
                case 1:
                    return UserUtils.userIdToName(getMaintainObjId());
                case 2:
                    return TeamUtils.teamIdToName(getMaintainObjId());
                case 3:
                    return DeptUtils.deptIdToName(getMaintainObjId());
            }
        }
        return maintainName;
    }
}
